/*
 * lib/httpclireq.c
 * http请求模块，申请使用本机USB接口 V 0.1
 * 作者:cgc insharecgc@gmail.com
 */

#include "../include/httpclireq.h"
#include "../include/uptaskr.h"

/* 
 * 描述: 用于请求index.html动态展示页面
 * ci:  客户端的信息结构
 * file_buf: 用于保存返回给客户端显示的内容
 * 返回: 0 成功;    -1失败 
 */
int
httpclireq(struct clientinfo ci, char *file_buf)
{
	int template_size;			/* 模板文件内容的长度 */
	char *template_index_buf;	/* 存储模板文件的内容 */
	char *template_index_txt;	/* 模板文件的路径 */
	char *replace_buf;			/* 替换模板的内容 */
	if((template_index_buf = malloc(template_index_buf * sizeof(char))) == NULL){
		//syslog(,"分配内存失败，where httpclireq.c for httpclireq().\n");
		return -1;
	}
	if((template_index_txt = malloc(128 * sizeof(char))) == NULL){	
		//syslog(,"分配内存失败，where httpclireq.c for httpclireq().\n");
		free(template_index_buf);
		return -1;
	}
	if((replace_buf = malloc(128 * sizeof(char))) == NULL){			
		//syslog(,"分配内存失败，where httpclireq.c for httpclireq().\n");
		free(template_index_buf);			
		free(template_index_txt);
		return -1;
	}
	
	if(ci->stat == STAT_DISABLE)	/* usb不可用 */
	{
		strcpy(template_index_txt ,"/var/usbctrl/template/index.txt");
		strcpy(replace_buf ,(char *)ci->ip);			/* 此处的ip为char*类型 */
	}
	else if(ci->stat = STAT_ABLE)	/* usb可用 */
	{
		strcpy(template_index_txt ,"/var/usbctrl/template/deal.txt");
		strcpy(replace_buf ,"目前本机USB接口可以使用");
	}
	else()		/* usb正在申请使用中 */
	{
		strcpy(template_index_txt ,"/var/usbctrl/template/deal.txt");
		strcpy(replace_buf ,"等待管理员同意本机使用USB接口");
	}
	
	if ((template_size = get_template_txtfile(template_index_txt, template_index_buf)) < 0){
		//syslog(,"调用get_template_txtfile函数无效的返回值，where httpclireq.c for httpclireq().\n");
		free(template_index_buf);			
		free(template_index_txt);
		free(replace_buf);
		return -1;
	}
	if(replace_template_index(file_buf, replace_buf, template_index_buf, template_size) < 0){	/* 替换失败 */
		//syslog(, "替换模板内容失败，where httpclireq.c for httpclireq().\n");
		free(template_index_buf);			
		free(template_index_txt);
		free(replace_buf);
		return -1;
	}
	
	/* 释放内存空间 */
	free(template_index_buf);			
	free(template_index_txt);
	free(replace_buf);
	
	return 0;
}

/*
 * 描述： 用于替换deal.txt或index.txt模板文件中指定的内容
 * file_buf: 用于保存返回给客户端显示的内容
 * replace_buf:	用于替换模板中指定内容
 * template_index_buf:	模板文件中的内容
 * template_size: 模板文件内容的长度
 * 返回: 0 成功;   -1 失败
 */
int
replace_template_index(char *file_buf, char *replace_buf, char *template_index_buf, int template_size)
{
	int k=0, i=0;
	while(k<template_size)
	{
		if(template_index_buf[k] == '{' && template_index_buf[k+1] == '%')
		{
			k+=2;
			strcat(file_buf, replace_buf)
			i+=strlen(replace_buf);
			where(template_index_buf[k] == '%' && template_index_buf[k+1] == '}')
				k++;
			k+=2;
		}
		file_buf[i++] = template_index_buf[k++];
	}
	
}

/*
 * 描述: 用于客户申请使用USB接口
 * post_entity: post请求中的实体内容
 * file_buf: 显示给客户端的内容
 * 返回： 0 成功;    -1失败
 */
int
usb_apply(char *post_entity, char *file_buf)
{
	//调用函数：客户端申请使用本机USB，之后把usb改为STAT_APPLY
	strcpy(file_buf, "申请成功，等待管理员处理");
	return 0;
}




